80.10 使用Ant构建可执行存档(不使用spring-boot-antlib)

想要使用Ant进行构建,你需要抓取依赖,编译,然后像通常那样创建一个jar或war存档。为了让它可以执行,你可以使用spring-boot-antlib,也可以使用以下指令:

  1. 如果构建jar,你需要将应用的类和资源打包进内嵌的BOOT-INF/classes目录。如果构建war,你需要将应用的类打包进内嵌的WEB-INF/classes目录。
  2. 对于jar,添加运行时依赖到内嵌的BOOT-INF/lib目录。对于war,则添加到WEB-INF/lib目录。注意不能压缩存档中的实体。
  3. 对于jar,添加provided依赖到内嵌的BOOT-INF/lib目录。对于war,则添加到WEB-INF/lib-provided目录。注意不能压缩存档中的实体。
  4. 在存档的根目录添加spring-boot-loader类(这样Main-Class就可用了)。
  5. 使用恰当的启动器,比如对于jar使用JarLauncher作为manifest的Main-Class属性,指定manifest的其他属性,特别是Start-Class

示例:

<target name="build" depends="compile">
    <jar destfile="target/${ant.project.name}-${spring-boot.version}.jar" compress="false">
        <mappedresources>
            <fileset dir="target/classes" />
            <globmapper from="*" to="BOOT-INF/classes/*"/>
        </mappedresources>
        <mappedresources>
            <fileset dir="src/main/resources" erroronmissingdir="false"/>
            <globmapper from="*" to="BOOT-INF/classes/*"/>
        </mappedresources>
        <mappedresources>
            <fileset dir="${lib.dir}/runtime" />
            <globmapper from="*" to="BOOT-INF/lib/*"/>
        </mappedresources>
        <zipfileset src="${lib.dir}/loader/spring-boot-loader-jar-${spring-boot.version}.jar" />
        <manifest>
            <attribute name="Main-Class" value="org.springframework.boot.loader.JarLauncher" />
            <attribute name="Start-Class" value="${start-class}" />
        </manifest>
    </jar>
</target>

Ant示例中有一个build.xml文件及manual任务,可以使用以下命令来运行:

$ ant -lib <folder containing ivy-2.2.jar> clean manual

在上述操作之后,你可以使用以下命令运行该应用:

$ java -jar target/*.jar